class Solution {
    //判断是不是完全二叉树
    //时间复杂度为O（N）
    //还有一个方法是时间复杂度为O（N）实现的，倒着来实现
    //在遍历的途中就计算左树和右树的高度，并且看绝对值大小，如果不满足，直接返回false;
    public boolean isBalanced(TreeNode root) {
        if(root==null){
            return true;
        }
        if(root.left==null&&root.right==null){
            return true;
        }
        int leftHeight=getHeight(root.left);
        int rightHeight=getHeight(root.right);
            return Math.abs(leftHeight-rightHeight)<2&&isBalanced(root.left)&&isBalanced(root.right);


    }
    public int getHeight(TreeNode root){
        if(root==null){
            return -1;
        }
       
        int leftHeight=getHeight(root.left);
        int rightHeight=getHeight(root.right);
        return leftHeight>rightHeight?leftHeight+1:rightHeight+1;
    }
}